package com.zs.games.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author tiantian.li
 * @description 正则工具
 * @date 2022年10月23日 17:53
 */

public final class RegexpUtils {
    /**
     * 匹配用户ID
     */
    public static final String THIRTY_TWO_NUMBER_ONLY_REGEXP = "^[0-9]{4,19}$";
    /**
     * 匹配用户名称
     */
    public static final String USERNAMER_REGEXP = "^[A-Za-z0-9]{6,20}$";

    /**
     * 用户邮箱验证正则
     */
    public static final String EMAIL_REGEXP = "[a-zA-Z0-9]+[\\.]{0,1}[a-zA-Z0-9]+@[a-zA-Z0-9]+\\.[a-zA-Z]+";

    /**
     * 群组头像路径匹配
     */
    public static final String GROUP_AVATAR_URL_REGEXP = "((http|https)://)(([a-zA-Z0-9\\._-]+\\.[a-zA-Z]{2,6})|([0-9]{1,3}(\\.[0-9]{1,3}){3}))(:[0-9]{1,4})[\\/]file[\\/]download[?]uri=\\/zim\\/avatar_group/(([a-zA-Z0-9\\._-]+[a-zA-Z]))";

    /**
     * 用户头像路径匹配
     */
    public static final String USER_AVATAR_URL_REGEXP = "((http|https)://)(([a-zA-Z0-9\\._-]+\\.[a-zA-Z]{2,6})|([0-9]{1,3}(\\.[0-9]{1,3}){3}))(:[0-9]{1,4})[\\/]file[\\/]download[?]uri=\\/zim\\/avatar/(([a-zA-Z0-9\\._-]+[a-zA-Z]))";

    /**
     * https://confluence.dev.t1t.com.cn/pages/viewpage.action?pageId=8945830
     * 1、必须输入密码
     * 2、密码长度：8-18位； 修改为 6-16位
     * 3、密码允许与账号相同；
     * 4、密码允许纯数字或字母；
     * 5、密码允许包含特殊字符
     */
    public static final String USER_PASSWORD_REGEXP = "[^\\u4e00-\\u9fa5]{6,16}$";

    /**
     * 昵称输入 1-25 个字符
     */
    public static final String USER_NICKNAME_REGEXP = "^.{1,25}$";

    /**
     * 账号需为6-16位；
     */
    public static final String USER_NAME_LENGTH = "^.{6,16}$";

    /**
     * 特殊字符
     * 4、不包含特殊字符；{：,#,¥,%,&、,,*,（,）,～,「,」,【,】,？,/,《,》,};
     */
    public static final String SPECIAL_CHAR = "[ _`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~！@#￥%……&*（）——+|{}【】‘；：”“’。《》，、？]|\n|\r|\t";

    /**
     * 1、账号需为6-16位；
     * 2、账号需包含字母和数字；
     * 3、前两位必须纯英文；
     * 4、账号不能有特殊字符；
     */
    public static final String USER_NAME_REGEXP = "^[a-zA-Z]{2}[a-zA-Z0-9]{4,14}$";

    /**
     * 1、必须输入账号
     * 2、账号长度：6-16位；
     * 3、账号允许纯数字或字母；
     * 4、账号中允许包含特殊字符（首尾不能有空格）
     */
    public static final String VALID_USER_NAME_REGEXP = "^(?!\\s)(?!.*\\s$)[^\\u4e00-\\u9fa5]{6,16}$";
    public static final String VALID_USER_NAME_REGEXP2 = "^\\S*$";

    /**
     * 1、注册时只限制账号6-16位
     * 2、允许包含特殊字符
     * 3、允许纯字母或数字
     * 4、不能包含空格
     */
    public static final String USER_NAME_PASSWORD_REGEXP="^[`~!@#$^&*()=|{}':;',\\\\[\\\\].<>《》/?~！@#￥……&*（）——|{}【】‘；：”“'。，、？]|[0-9A-Za-z]{6,16}$";
    /**
     * 校验方法
     *
     * @param content 要校验的内容
     * @param reg     要使用的正则
     * @return true or false
     */
    public static boolean validateInfo(String content, String reg) {
        Pattern pat = Pattern.compile(reg);
        Matcher mat = pat.matcher(content);
        return mat.matches();
    }

    /**
     * 判断文本是否包含特殊字符
     *
     * @param text 文本
     * @return true or false
     */
    public static boolean isContainSpecialChar(String text) {
        for (int i = 0; i < text.length(); i++) {
            for (int j = 0; j < SPECIAL_CHAR.length(); j++) {
                if (text.charAt(i) == SPECIAL_CHAR.charAt(j)) {
                    return true;
                }
            }
        }
        return false;
    }
}
